package com.air.antispider.stream.dataprocess.businessprocess

import java.util.regex.{Matcher, Pattern}

import com.air.antispider.stream.common.util.decode.MD5
import org.apache.spark.rdd.RDD

/**
  * 用户敏感信息加密
  */
object EncryptedData {
  /**
    * 加密身份证号
    *
    * @param encryptedPhoneRDD
    * @return
    */
  def encryptedIDNum(encryptedPhoneRDD: RDD[String]): RDD[String] = {
    //String(加密之前) => String (加密之后的数据)
    encryptedPhoneRDD.map(message => {
      //加密工具对象
      val md5 = new MD5
      var tempMessage = message
      //用正则看是否有需要的身份证号
      val phonePattern: Pattern = Pattern.compile("(\\\\d{18})|(\\\\d{17}(\\\\d|X|x))|(\\\\d{15})")
      //匹配的规则结果
      val matcher: Matcher = phonePattern.matcher(message)
      while (matcher.find()) {
        //如果能找到,那么就进来,开始取出数据
        val phone: String = matcher.group()
        //对身份证号进行加密操作
        val encryptedPhone: String = md5.getMD5ofStr(phone)
        tempMessage = tempMessage.replace(phone, encryptedPhone)
      }
      tempMessage
    })
  }

  /**
    * 加密手机号操作
    *
    * @param filterRDD
    */
  def encryptedPhoneNum(filterRDD: RDD[String]): RDD[String] = {
    //String(加密之前) => String (加密之后的数据)
    filterRDD.map(message => {
      //加密工具对象
      val md5 = new MD5
      var tempMessage = message
      //用正则看是否有需要的手机号
      val phonePattern: Pattern = Pattern.compile("((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(17[0-9])|(18[0,5-9]))\\d{8}")
      //匹配的规则结果
      val matcher: Matcher = phonePattern.matcher(message)
      while (matcher.find()) {
        //如果能找到,那么就进来,开始取出数据
        val phone: String = matcher.group()
        //对手机号进行加密操作
        val encryptedPhone: String = md5.getMD5ofStr(phone)
        tempMessage = tempMessage.replace(phone, encryptedPhone)
      }
      tempMessage
    })
  }

}